home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / iconv8_s.arc / ICONT.ARC / LINK.H < prev    next >
C/C++ Source or Header  |  1990-03-28  |  6KB  |  161 lines

  1. /*
  2.  * External declarations for the linker.
  3.  */
  4.  
  5. #include "..\h\rt.h"
  6.  
  7. #ifdef ATT3B
  8. #include <sys\types.h>
  9. #include <sys\stat.h>
  10. #endif                    /* ATT3B */
  11.  
  12. /*
  13.  * Miscellaneous external declarations.
  14.  */
  15.  
  16. extern FILE *infile;        /* current input file */
  17. extern FILE *outfile;        /* linker output file */
  18. extern FILE *dbgfile;        /* debug file */
  19. extern char inname[];        /* input file name */
  20. extern int lineno;        /* source program line number (from ucode) */
  21.  
  22. #ifdef EvalTrace
  23. extern int colmno;        /* source program column number */
  24. #endif                    /* EvalTrace */
  25.  
  26. extern int lstatics;        /* total number of statics */
  27. extern int argoff;        /* stack offset counter for arguments */
  28. extern int dynoff;        /* stack offset counter for locals */
  29. extern int static1;        /* first static in procedure */
  30. extern int nlocal;        /* number of locals in local table */
  31. extern int nconst;        /* number of constants in constant table */
  32. extern int nrecords;        /* number of records in program */
  33. extern int trace;        /* initial setting of &trace */
  34. extern char ixhdr[];        /* header line for direct execution */
  35. extern char *iconx;        /* location of iconx */
  36. extern int hdrloc;        /* location to place hdr block at */
  37. extern struct lfile *llfiles;    /* list of files to link */
  38.  
  39. /*
  40.  * Structures for symbol table entries.
  41.  */
  42.  
  43. struct lentry {            /* local table entry */
  44.    char *l_name;        /*   name of variable */
  45.    int l_flag;            /*   variable flags */
  46.    union {            /*   value field */
  47.       int staticid;        /*     unique id for static variables */
  48.       word offset;        /*       stack offset for args and locals */
  49.       struct gentry *global;    /*     global table entry */
  50.       } l_val;
  51.    };
  52.  
  53. struct gentry {            /* global table entry */
  54.    struct gentry *g_blink;    /*    link for bucket chain */
  55.    char *g_name;        /*   name of variable */
  56.    int g_flag;            /*   variable flags */
  57.    int g_nargs;            /*   number of args or fields */
  58.    int g_procid;        /*   procedure or record id */
  59.    word g_pc;            /*   position in icode of object */
  60.    };
  61.  
  62. struct centry {            /* constant table entry */
  63.    int c_flag;            /*   type of literal flag */
  64.    union {            /*   value field */
  65.       long ival;        /*     integer */
  66.       double rval;        /*       real */
  67.       char *sval;        /*      string */
  68.       } c_val;
  69.    int c_length;        /*   length of literal string */
  70.    word c_pc;            /*   position in icode of object */
  71.    };
  72.  
  73. struct ientry {            /* identifier table entry */
  74.    struct ientry *i_blink;    /*    link for bucket chain */
  75.    char *i_name;        /*   pointer to string */
  76.    int i_length;        /*   length of string */
  77.    };
  78.  
  79. struct fentry {            /* field table header entry */
  80.    struct fentry *f_blink;    /*    link for bucket chain */
  81.    char *f_name;        /*   name of field */
  82.    int f_fid;            /*   field id */
  83.    struct rentry *f_rlist;    /*    head of list of records */
  84.    };
  85.  
  86. struct rentry {            /* field table record list entry */
  87.    struct rentry *r_link;    /*   link for list of records */
  88.    int r_recid;            /*   record id */
  89.    int r_fnum;            /*   offset of field within record */
  90.    };
  91.  
  92. /*
  93.  * Structure for linked list of file names to link.
  94.  */
  95. struct lfile {
  96.    struct lfile *lf_link;    /* next file in list */
  97.    char *lf_name;        /* name of file */
  98.    };
  99.  
  100. /*
  101.  * Flag values in symbol tables.
  102.  */
  103.  
  104. #define F_Global        01    /* variable declared global externally */
  105. #define F_Proc            05    /* procedure (includes GLOBAL) */
  106. #define F_Record       011    /* record (includes GLOBAL) */
  107. #define F_Dynamic       020    /* variable declared local dynamic */
  108. #define F_Static       040    /* variable declared local static */
  109. #define F_Builtin      0101    /* identifier refers to built-in procedure */
  110. #define F_ImpError      0400    /* procedure has default error */
  111. #define F_Argument     01000    /* variable is a formal parameter */
  112. #define F_IntLit     02000    /* literal is an integer */
  113. #define F_RealLit     04000    /* literal is a real */
  114. #define F_StrLit    010000    /* literal is a string */
  115. #define F_CsetLit    020000    /* literal is a cset */
  116.  
  117. /*
  118.  * Symbol table region pointers.
  119.  */
  120.  
  121. extern struct gentry **lghash;    /* hash area for global table */
  122. extern struct ientry **lihash;    /* hash area for identifier table */
  123. extern struct fentry **lfhash;    /* hash area for field table */
  124.  
  125. extern struct lentry *lltable;    /* local table */
  126. extern struct gentry *lgtable;    /* global table */
  127. extern struct centry *lctable;    /* constant table */
  128. extern struct ientry *litable;    /* identifier table */
  129. extern struct fentry *lftable;    /* field table headers */
  130. extern struct rentry *lrtable;    /* field table record lists */
  131. extern struct ipc_fname *fnmtbl; /* table associating ipc with file name */
  132. extern struct ipc_line *lntable; /* table associating ipc with line number */
  133. extern char *lsspace;        /* string space */
  134. extern word *labels;        /* label table */
  135. extern char *codeb;        /* generated code space */
  136.  
  137. extern struct gentry *lgfree;    /* free pointer for global table */
  138. extern struct ientry *lifree;    /* free pointer for identifier table */
  139. extern struct fentry *lffree;    /* free pointer for field table headers */
  140. extern struct rentry *lrfree;    /* free pointer for field table record lists */
  141. extern struct ipc_fname *fnmfree; /* free pointer for ipc/file name tbl */
  142. extern struct ipc_line *lnfree;    /* free pointer for ipc/line number tbl */
  143. extern char *lsfree;        /* free pointer for string space */
  144. extern char *codep;        /* free pointer for code space */
  145.  
  146. extern char *lsend;        /* pointer to end of string space */
  147.  
  148.  
  149. /*
  150.  * Hash computation macros.
  151.  */
  152.  
  153. #define ghasher(x)    (((word)x)&gmask)    /* for global table */
  154. #define fhasher(x)    (((word)x)&fmask)    /* for field table */
  155.  
  156. /*
  157.  * Machine-dependent constants.
  158.  */
  159.  
  160. #define RkBlkSize 9*WordSize    /* size of record constructor block */
  161.